package com.javabasic.algorithm.leetcode;

/**
 * @Author xiongmin
 * @Description //TODO
 * @Date 2020/1/12 23:43
 * @Version 1.0
 **/
public class SameTree {

    /**
     * @解法：递归解法
     * @param p
     * @param q
     * @return
     */
    public boolean isSameTree(TreeNode p, TreeNode q) {
        return equalTreeNode(p,q);
    }

    public boolean equalTreeNode(TreeNode p, TreeNode q) {
        if (equalNode(p,q)) {
            if (p != null && q !=null) {
                if (equalTreeNode(p.left,q.left)&& equalTreeNode(p.right,q.right)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return true;
            }

        }
        return false;
    }

    public boolean equalNode(TreeNode p, TreeNode q) {
        if (p == null && q == null) return true;
        if (p != null && q != null) return p.val == q.val;
        return false;
    }

    public boolean equalTreeNode2(TreeNode p, TreeNode q) {
        if (p == null && q == null) return true;
        if (p != null && q != null) {
            if (p.val == q.val) {
                // 递归比较当前节点的左右节点，如果都相同，那么这个tree就是相同的
                if (equalTreeNode2(p.left,q.left) && equalTreeNode2(p.right,q.right)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
        return false;
    }

}
